//
//  DJvisitorView.swift
//  DJWeibo
//
//  Created by demo on 2017/3/14.
//  Copyright © 2017年 demo. All rights reserved.
//

import UIKit

class DJvisitorView: UIView {

    //把按钮放到访客视图的.h中，可通过addTarget方法监听按钮点击事件
    //注册按钮
     lazy var registerBtn:UIButton = UIButton.cz_textButton("注册", fontSize: 16, normalColor: UIColor.orange, highlightedColor: UIColor.black, backgroundImageName: "common_button_white_disable")
    
    //登录按钮
     lazy var loginBtn:UIButton = UIButton.cz_textButton("登录", fontSize: 16, normalColor: UIColor.darkGray, highlightedColor: UIColor.black, backgroundImageName: "common_button_white_disable")
    //MARK: -使用字典设置访客视图信息
    //把方法改成属性的形式
    //访客视图信息字典[imageView/message]
    //如果是首页，imageName == ""
    //信息字典中的值由外部传进来，重写set方法（即实现该属性的didSet方法）
    var visitorInfo:[String:String]?{
        didSet{
            //1 取字典信息
            guard let imageName = visitorInfo?["imageName"],
                let message = visitorInfo?["message"] else{
                    return
            }
            //2 设置消息
            tipLabel.text = message
            
            //3 设置图像
            if imageName == "" {
                startAnimation()
                return
            }
            
            iconView.image = UIImage(named: imageName)
            //其他控制器的访客视图不需要显示小房子和遮罩
            houseView.isHidden = true
            maskIconView.isHidden = true

        }
    }
    
    //MARK: -构造函数
    override init(frame: CGRect) {
        super.init(frame: frame)
        
        setupUI()
    }
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    //旋转图标动画
    private func startAnimation(){
        let ani = CABasicAnimation(keyPath:"transform.rotation")
        ani.toValue = 2 * M_PI
        ani.repeatCount = MAXFLOAT
        ani.duration = 15
        
        //动画完成不删除，如果iconView被删除，动画会一起销毁
        //设置连续播放动画，离开后再回来动画还在动
        ani.isRemovedOnCompletion = false
        //动画添加到图层
        iconView.layer.add(ani, forKey: nil)
        
    }
    
     //MARK: -私有控件
    //图像视图
    fileprivate lazy var iconView = UIImageView(image: UIImage(named: "visitordiscover_feed_image_smallicon"))
    
    //遮罩图像 - 不要使用maskView
    fileprivate lazy var maskIconView:UIImageView = UIImageView(image: UIImage(named: "visitordiscover_feed_mask_smallicon"))
    
    //小房子
    fileprivate lazy var houseView = UIImageView(image: UIImage(named: "visitordiscover_feed_image_house"))

    //提示标签
    fileprivate lazy var tipLabel:UILabel = UILabel.cz_label(withText: "关注一些人,回这里看看有什么惊喜 关注一些人,回这里看看有什么惊喜", fontSize: 14, color: UIColor.darkGray)  //懒加载除了调用UIKit的控件的指定构造函数外，其他都需要使用类型，即在变量名后指明类型？？？？
   
}

extension DJvisitorView{
    func setupUI(){
        //开发时能使用颜色就不要使用图像
        backgroundColor = UIColor.cz_color(withRed: 237, green: 237, blue: 237)
        
        //添加控件
        addSubview(iconView)
        addSubview(maskIconView)
        addSubview(houseView)
        addSubview(tipLabel)
        addSubview(registerBtn)
        addSubview(loginBtn)
        
        //文字居中
        tipLabel.textAlignment = .center
        
        //取消autoresizing
        for v in subviews {
            v.translatesAutoresizingMaskIntoConstraints = false
        }
        
        //自动布局
        
        let margin:CGFloat = 20
        
        //图像视图
        addConstraint(NSLayoutConstraint(item: iconView,
                                         attribute: .centerX, relatedBy: .equal, toItem: self, attribute: .centerX, multiplier: 1.0, constant: 0))
        addConstraint(NSLayoutConstraint(item: iconView,
                                         attribute: .centerY, relatedBy: .equal, toItem: self, attribute: .centerY, multiplier: 1.0, constant: -60))

        //小房子
        addConstraint(NSLayoutConstraint(item: houseView,
                                         attribute: .centerX, relatedBy: .equal, toItem: iconView, attribute: .centerX, multiplier: 1.0, constant: 0))
        addConstraint(NSLayoutConstraint(item: houseView,
                                         attribute: .centerY, relatedBy: .equal, toItem: iconView, attribute: .centerY, multiplier: 1.0, constant: 0))
        
        //提示标签
        addConstraint(NSLayoutConstraint(item: tipLabel,
                                         attribute: .centerX, relatedBy: .equal, toItem: iconView, attribute: .centerX, multiplier: 1.0, constant: 0))
        
        addConstraint(NSLayoutConstraint(item: tipLabel,
                                         attribute: .top, relatedBy: .equal, toItem: iconView, attribute: .bottom, multiplier: 1.0, constant: margin))
        
        addConstraint(NSLayoutConstraint(item: tipLabel,
                                         attribute: .width, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1.0, constant: 236))
        
        //注册按钮
        addConstraint(NSLayoutConstraint(item: registerBtn,
                                         attribute: .left, relatedBy: .equal, toItem: tipLabel, attribute: .left, multiplier: 1.0, constant: margin))
        
        addConstraint(NSLayoutConstraint(item: registerBtn,
                                         attribute: .top, relatedBy: .equal, toItem: tipLabel, attribute: .bottom, multiplier: 1.0, constant: margin))
        
        addConstraint(NSLayoutConstraint(item: registerBtn,
                                         attribute: .width, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1.0, constant: 100))
        
        //登录按钮
        addConstraint(NSLayoutConstraint(item: loginBtn,
                                         attribute: .right, relatedBy: .equal, toItem: tipLabel, attribute: .right, multiplier: 1.0, constant: 0))
        
        addConstraint(NSLayoutConstraint(item: loginBtn,
                                         attribute: .top, relatedBy: .equal, toItem: tipLabel, attribute: .bottom, multiplier: 1.0, constant: margin))
        
        addConstraint(NSLayoutConstraint(item: loginBtn,
                                         attribute: .width, relatedBy: .equal, toItem: registerBtn, attribute: .width, multiplier: 1.0, constant: 0))
        
        //遮罩图像 -VFL的使用
        //views参数：定义VFL中的控件名称和实际名称映射关系
        //views中包含VFL中用到的所有控件
        let viewDict:[String:Any] = ["maskIconView":maskIconView,
                        "registerBtn":registerBtn]
        //metrics（约束数值字典）：定义VFL中（）指定的常数映射关系
        //格式：
        let metrics = ["spacing":-35]
        
        //水平方向
        addConstraints(NSLayoutConstraint.constraints(
            withVisualFormat: "H:|-0-[maskIconView]-0-|", options: [], metrics: nil, views: viewDict))
        
        //option参数，此处若不需要设置参数，则参数为空数组[]，若需要设置参数，则在数组[]中设置参数，格式：[.XXX|.XXX]
        //垂直方向
        addConstraints(NSLayoutConstraint.constraints(
            withVisualFormat: "V:|-0-[maskIconView]-(spacing)-[registerBtn]", options: [], metrics: metrics, views: viewDict))
        //[maskIconView]和[registerBtn]之间的0是以registerBtn上边界为参照，往上为正，往下为负
    }
}

